package com.bdqn.easybuy1.dao;

import com.bdqn.easybuy1.entities.Product;

import java.sql.Connection;
import java.util.List;

public interface ProductDao {
    /**
     * 更新产品库存
     *
     * @param conn     数据库连接对象
     * @param id       产品id
     * @param quantity 更新后的数量
     * @return 返回受影响的行数
     * @throws Exception
     */
    int updateStock(Connection conn, Integer id, Integer quantity) throws Exception;

    /**
     * 添加一个产品信息
     *
     * @param conn    数据库连接对象
     * @param product 封装产品信息的对象
     * @return 返回受影响的行数
     * @throws Exception
     */
    int insert(Connection conn, Product product) throws Exception;

    /**
     * 更新产品信息
     *
     * @param conn    数据库连接对象
     * @param product 封装要修改产品信息的对象
     * @return 返回受影响的行数
     * @throws Exception
     */
    int update(Connection conn, Product product) throws Exception;

    /**
     * 根据产品id删除指定产品
     *
     * @param conn 数据库连接对象
     * @param id   要删除产品的id
     * @return 返回受影响的行数
     * @throws Exception
     */
    int deleteProductById(Connection conn, Integer id) throws Exception;

    /**
     * 根据产品的id查询产品对象
     *
     * @param conn 数据库连接对象
     * @param id   产品id
     * @return 返回产品对象
     * @throws Exception
     */
    Product getProductById(Connection conn, Integer id) throws Exception;

    /**
     * 分页查询产品信息
     *
     * @param conn          数据库连接对象
     * @param currentPageNo 当前页
     * @param pageSize      每页显示数据量大小
     * @param proName       产品名称
     * @param categoryId    分类id
     * @param level         分类级别
     * @return 返回产品的列表
     * @throws Exception
     */
    List<Product> getProductList(Connection conn, Integer currentPageNo, Integer pageSize, String proName, Integer categoryId, Integer level) throws Exception;

    /**
     * 查询分页产品的总条数
     *
     * @param conn       数据库连接对象
     * @param proName    产品名称
     * @param categoryId 分类id
     * @param level      分类的级别
     * @return
     * @throws Exception
     */
    Integer queryProductCount(Connection conn, String proName, Integer categoryId, Integer level) throws Exception;
}
